﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using TrabalhoIA.Domain;
using TrabalhoIA.DAO;
using TrabalhoIA.Calculos;

namespace TreinamentoIA
{
    class Program
    {


        private static Double limear = -1;
        private static RedesNeurais redeReurais = new RedesNeurais();
        private static EntradasDAO entradasDAO = new EntradasDAO();
        static void Main(string[] args)
        {
            String opc = "N";
            do
            {

                List<Double> pesos = new List<Double>();
                List<Entrada> entradas = entradasDAO.buscaEntradas();
                Int32 linhas = 0;
                Int32 testes;
                pesos.Add(0.5);
                pesos.Add(0.4);
                pesos.Add(-0.6);
                pesos.Add(0.6);

                Console.Clear();
                Console.WriteLine("---- Iniciando sistema ----");

                do
                {
                    Console.WriteLine("---- Iniciando ciclo ----");
                    Console.WriteLine("---- Pesos iniciais ----");

                    foreach (var item in pesos)
                    {
                        Console.WriteLine(item);
                    }

                    Console.WriteLine("---- Inicio de aprendizagem ----");

                    
                    if (entradas[linhas].entradas.Count == 3) entradas[linhas].entradas.Add(limear);

                    pesos = redeReurais.treina(entradas[linhas].resultado, 0.4, pesos, entradas[linhas].entradas);

                    linhas++;
                } while (linhas < entradas.Count * 0.6);


                Console.WriteLine("Item\tEntradas\tResultado");
                testes = 0;
                foreach (var item in entradas)
                {
                    if (item.entradas.Count == 3) item.entradas.Add(limear);
                    Double resultado = redeReurais.classificar(pesos, item.entradas);
                    String entrada = "";
                    foreach (var textos in item.entradas)
                    {
                        entrada += textos + "\t";
                    }


                    Console.WriteLine(++testes + "\t" + entrada + "\t" + resultado);


                }
              

                Console.WriteLine("Deseja reiniciar?(S/N)");

                do
                {
                    opc = Console.ReadLine();
                } while (!opc.ToUpper().Equals("S") && !opc.ToUpper().Equals("N"));
            } while (opc.ToUpper().Equals("S"));


            Console.Clear();

            Console.WriteLine(" ======================================================================");


            Console.WriteLine("|\t\t\t\t\tAté logo\t\t\t|");
            Console.WriteLine(" ======================================================================");

            Thread.Sleep(500);
        }


    }

}
